home *** CD-ROM | disk | FTP | other *** search
/ Macwelt 1 / Macwelt DVD 1.toast / Software für Mac-OS X / Entwickler-Tools / netbeans / modules / ext / djava.jar / koala / dynamicjava / interpreter / NameVisitor.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-03-14  |  18.4 KB  |  915 lines

  1. package koala.dynamicjava.interpreter;
  2.  
  3. import java.util.Iterator;
  4. import java.util.LinkedList;
  5. import java.util.List;
  6. import java.util.ListIterator;
  7. import koala.dynamicjava.interpreter.context.Context;
  8. import koala.dynamicjava.interpreter.error.CatchedExceptionError;
  9. import koala.dynamicjava.interpreter.error.ExecutionError;
  10. import koala.dynamicjava.tree.AddAssignExpression;
  11. import koala.dynamicjava.tree.AddExpression;
  12. import koala.dynamicjava.tree.AndExpression;
  13. import koala.dynamicjava.tree.ArrayAccess;
  14. import koala.dynamicjava.tree.ArrayAllocation;
  15. import koala.dynamicjava.tree.ArrayInitializer;
  16. import koala.dynamicjava.tree.BinaryExpression;
  17. import koala.dynamicjava.tree.BitAndAssignExpression;
  18. import koala.dynamicjava.tree.BitAndExpression;
  19. import koala.dynamicjava.tree.BitOrAssignExpression;
  20. import koala.dynamicjava.tree.BitOrExpression;
  21. import koala.dynamicjava.tree.BlockStatement;
  22. import koala.dynamicjava.tree.CastExpression;
  23. import koala.dynamicjava.tree.CatchStatement;
  24. import koala.dynamicjava.tree.ClassAllocation;
  25. import koala.dynamicjava.tree.ClassDeclaration;
  26. import koala.dynamicjava.tree.ComplementExpression;
  27. import koala.dynamicjava.tree.ConditionalExpression;
  28. import koala.dynamicjava.tree.DivideAssignExpression;
  29. import koala.dynamicjava.tree.DivideExpression;
  30. import koala.dynamicjava.tree.DoStatement;
  31. import koala.dynamicjava.tree.EqualExpression;
  32. import koala.dynamicjava.tree.ExclusiveOrAssignExpression;
  33. import koala.dynamicjava.tree.ExclusiveOrExpression;
  34. import koala.dynamicjava.tree.Expression;
  35. import koala.dynamicjava.tree.ExpressionContainer;
  36. import koala.dynamicjava.tree.ForStatement;
  37. import koala.dynamicjava.tree.FormalParameter;
  38. import koala.dynamicjava.tree.FunctionCall;
  39. import koala.dynamicjava.tree.GreaterExpression;
  40. import koala.dynamicjava.tree.GreaterOrEqualExpression;
  41. import koala.dynamicjava.tree.IdentifierToken;
  42. import koala.dynamicjava.tree.IfThenElseStatement;
  43. import koala.dynamicjava.tree.IfThenStatement;
  44. import koala.dynamicjava.tree.ImportDeclaration;
  45. import koala.dynamicjava.tree.InnerAllocation;
  46. import koala.dynamicjava.tree.InnerClassAllocation;
  47. import koala.dynamicjava.tree.InstanceOfExpression;
  48. import koala.dynamicjava.tree.InterfaceDeclaration;
  49. import koala.dynamicjava.tree.LabeledStatement;
  50. import koala.dynamicjava.tree.LessExpression;
  51. import koala.dynamicjava.tree.LessOrEqualExpression;
  52. import koala.dynamicjava.tree.MinusExpression;
  53. import koala.dynamicjava.tree.MultiplyAssignExpression;
  54. import koala.dynamicjava.tree.MultiplyExpression;
  55. import koala.dynamicjava.tree.Node;
  56. import koala.dynamicjava.tree.NotEqualExpression;
  57. import koala.dynamicjava.tree.NotExpression;
  58. import koala.dynamicjava.tree.ObjectFieldAccess;
  59. import koala.dynamicjava.tree.ObjectMethodCall;
  60. import koala.dynamicjava.tree.OrExpression;
  61. import koala.dynamicjava.tree.PackageDeclaration;
  62. import koala.dynamicjava.tree.PlusExpression;
  63. import koala.dynamicjava.tree.PostDecrement;
  64. import koala.dynamicjava.tree.PostIncrement;
  65. import koala.dynamicjava.tree.PreDecrement;
  66. import koala.dynamicjava.tree.PreIncrement;
  67. import koala.dynamicjava.tree.QualifiedName;
  68. import koala.dynamicjava.tree.ReferenceType;
  69. import koala.dynamicjava.tree.RemainderAssignExpression;
  70. import koala.dynamicjava.tree.RemainderExpression;
  71. import koala.dynamicjava.tree.ReturnStatement;
  72. import koala.dynamicjava.tree.ShiftLeftAssignExpression;
  73. import koala.dynamicjava.tree.ShiftLeftExpression;
  74. import koala.dynamicjava.tree.ShiftRightAssignExpression;
  75. import koala.dynamicjava.tree.ShiftRightExpression;
  76. import koala.dynamicjava.tree.SimpleAllocation;
  77. import koala.dynamicjava.tree.SimpleAssignExpression;
  78. import koala.dynamicjava.tree.StaticFieldAccess;
  79. import koala.dynamicjava.tree.StaticMethodCall;
  80. import koala.dynamicjava.tree.SubtractAssignExpression;
  81. import koala.dynamicjava.tree.SubtractExpression;
  82. import koala.dynamicjava.tree.SuperMethodCall;
  83. import koala.dynamicjava.tree.SwitchBlock;
  84. import koala.dynamicjava.tree.SwitchStatement;
  85. import koala.dynamicjava.tree.SynchronizedStatement;
  86. import koala.dynamicjava.tree.ThisExpression;
  87. import koala.dynamicjava.tree.ThrowStatement;
  88. import koala.dynamicjava.tree.TreeUtilities;
  89. import koala.dynamicjava.tree.TryStatement;
  90. import koala.dynamicjava.tree.UnsignedShiftRightAssignExpression;
  91. import koala.dynamicjava.tree.UnsignedShiftRightExpression;
  92. import koala.dynamicjava.tree.VariableDeclaration;
  93. import koala.dynamicjava.tree.WhileStatement;
  94. import koala.dynamicjava.tree.visitor.VisitorObject;
  95.  
  96. public class NameVisitor extends VisitorObject {
  97.    private Context context;
  98.  
  99.    public Object visit(PackageDeclaration var1) {
  100.       this.context.setCurrentPackage(var1.getName());
  101.       return null;
  102.    }
  103.  
  104.    public Object visit(ImportDeclaration var1) {
  105.       if (var1.isPackage()) {
  106.          this.context.declarePackageImport(var1.getName());
  107.       } else {
  108.          try {
  109.             this.context.declareClassImport(var1.getName());
  110.          } catch (ClassNotFoundException var3) {
  111.             throw new CatchedExceptionError(var3, var1);
  112.          }
  113.       }
  114.  
  115.       return null;
  116.    }
  117.  
  118.    public Object visit(WhileStatement var1) {
  119.       Node var2 = var1.getCondition();
  120.       Object var3 = var2.acceptVisitor(this);
  121.       if (var3 != null) {
  122.          if (var3 instanceof ReferenceType) {
  123.             throw new ExecutionError("malformed.expression", var2);
  124.          }
  125.  
  126.          var1.setCondition((Expression)var3);
  127.       }
  128.  
  129.       var2 = var1.getBody();
  130.       var3 = var2.acceptVisitor(this);
  131.       if (var3 != null) {
  132.          if (var3 instanceof ReferenceType) {
  133.             throw new ExecutionError("malformed.expression", var2);
  134.          }
  135.  
  136.          var1.setBody((Node)var3);
  137.       }
  138.  
  139.       return null;
  140.    }
  141.  
  142.    public Object visit(ForStatement var1) {
  143.       this.context.enterScope();
  144.       List var2;
  145.       if ((var2 = var1.getInitialization()) != null) {
  146.          this.visitList(var2);
  147.       }
  148.  
  149.       Expression var3;
  150.       if ((var3 = var1.getCondition()) != null) {
  151.          Object var4 = var3.acceptVisitor(this);
  152.          if (var4 != null) {
  153.             if (var4 instanceof ReferenceType) {
  154.                throw new ExecutionError("malformed.expression", var3);
  155.             }
  156.  
  157.             var1.setCondition((Expression)var4);
  158.          }
  159.       }
  160.  
  161.       if ((var2 = var1.getUpdate()) != null) {
  162.          this.visitList(var2);
  163.       }
  164.  
  165.       var3 = var1.getBody();
  166.       Object var7 = var3.acceptVisitor(this);
  167.       if (var7 != null) {
  168.          if (var7 instanceof ReferenceType) {
  169.             throw new ExecutionError("malformed.expression", var3);
  170.          }
  171.  
  172.          var1.setBody((Node)var7);
  173.       }
  174.  
  175.       this.context.leaveScope();
  176.       return null;
  177.    }
  178.  
  179.    public Object visit(DoStatement var1) {
  180.       Node var2 = var1.getCondition();
  181.       Object var3 = var2.acceptVisitor(this);
  182.       if (var3 != null) {
  183.          if (var3 instanceof ReferenceType) {
  184.             throw new ExecutionError("malformed.expression", var2);
  185.          }
  186.  
  187.          var1.setCondition((Expression)var3);
  188.       }
  189.  
  190.       var2 = var1.getBody();
  191.       var3 = var2.acceptVisitor(this);
  192.       if (var3 != null) {
  193.          if (var3 instanceof ReferenceType) {
  194.             throw new ExecutionError("malformed.expression", var2);
  195.          }
  196.  
  197.          var1.setBody((Node)var3);
  198.       }
  199.  
  200.       return null;
  201.    }
  202.  
  203.    public Object visit(SwitchStatement var1) {
  204.       Expression var2 = var1.getSelector();
  205.       Object var3 = var2.acceptVisitor(this);
  206.       if (var3 != null) {
  207.          if (var3 instanceof ReferenceType) {
  208.             throw new ExecutionError("malformed.expression", var2);
  209.          }
  210.  
  211.          var1.setSelector((Expression)var3);
  212.       }
  213.  
  214.       Iterator var4 = var1.getBindings().iterator();
  215.  
  216.       while(var4.hasNext()) {
  217.          ((Node)var4.next()).acceptVisitor(this);
  218.       }
  219.  
  220.       return null;
  221.    }
  222.  
  223.    public Object visit(SwitchBlock var1) {
  224.       Expression var2 = var1.getExpression();
  225.       if (var2 != null) {
  226.          this.visitExpressionContainer(var1);
  227.       }
  228.  
  229.       List var3;
  230.       if ((var3 = var1.getStatements()) != null) {
  231.          this.visitList(var3);
  232.       }
  233.  
  234.       return null;
  235.    }
  236.  
  237.    public Object visit(LabeledStatement var1) {
  238.       Node var2 = var1.getStatement();
  239.       Object var3 = var2.acceptVisitor(this);
  240.       if (var3 != null) {
  241.          if (var3 instanceof ReferenceType) {
  242.             throw new ExecutionError("malformed.expression", var2);
  243.          }
  244.  
  245.          var1.setStatement((Expression)var3);
  246.       }
  247.  
  248.       return null;
  249.    }
  250.  
  251.    public Object visit(ThrowStatement var1) {
  252.       this.visitExpressionContainer(var1);
  253.       return null;
  254.    }
  255.  
  256.    public Object visit(SynchronizedStatement var1) {
  257.       Node var2 = var1.getLock();
  258.       Object var3 = var2.acceptVisitor(this);
  259.       if (var3 != null) {
  260.          if (var3 instanceof ReferenceType) {
  261.             throw new ExecutionError("malformed.expression", var2);
  262.          }
  263.  
  264.          var1.setLock((Expression)var3);
  265.       }
  266.  
  267.       var2 = var1.getBody();
  268.       var3 = var2.acceptVisitor(this);
  269.       if (var3 != null) {
  270.          if (var3 instanceof ReferenceType) {
  271.             throw new ExecutionError("malformed.expression", var2);
  272.          }
  273.  
  274.          var1.setBody((Node)var3);
  275.       }
  276.  
  277.       return null;
  278.    }
  279.  
  280.    public Object visit(TryStatement var1) {
  281.       var1.getTryBlock().acceptVisitor(this);
  282.       Iterator var2 = var1.getCatchStatements().iterator();
  283.  
  284.       while(var2.hasNext()) {
  285.          ((Node)var2.next()).acceptVisitor(this);
  286.       }
  287.  
  288.       Node var3;
  289.       if ((var3 = var1.getFinallyBlock()) != null) {
  290.          var3.acceptVisitor(this);
  291.       }
  292.  
  293.       return null;
  294.    }
  295.  
  296.    public Object visit(CatchStatement var1) {
  297.       this.context.enterScope();
  298.       var1.getException().acceptVisitor(this);
  299.       var1.getBlock().acceptVisitor(this);
  300.       this.context.leaveScope();
  301.       return null;
  302.    }
  303.  
  304.    public Object visit(ReturnStatement var1) {
  305.       Expression var2 = var1.getExpression();
  306.       if (var2 != null) {
  307.          this.visitExpressionContainer(var1);
  308.       }
  309.  
  310.       return null;
  311.    }
  312.  
  313.    public Object visit(IfThenStatement var1) {
  314.       Node var2 = var1.getCondition();
  315.       Object var3 = var2.acceptVisitor(this);
  316.       if (var3 != null) {
  317.          if (var3 instanceof ReferenceType) {
  318.             throw new ExecutionError("malformed.expression", var2);
  319.          }
  320.  
  321.          var1.setCondition((Expression)var3);
  322.       }
  323.  
  324.       var2 = var1.getThenStatement();
  325.       var3 = var2.acceptVisitor(this);
  326.       if (var3 != null) {
  327.          if (var3 instanceof ReferenceType) {
  328.             throw new ExecutionError("malformed.expression", var2);
  329.          }
  330.  
  331.          var1.setThenStatement((Node)var3);
  332.       }
  333.  
  334.       return null;
  335.    }
  336.  
  337.    public Object visit(IfThenElseStatement var1) {
  338.       Node var2 = var1.getCondition();
  339.       Object var3 = var2.acceptVisitor(this);
  340.       if (var3 != null) {
  341.          if (var3 instanceof ReferenceType) {
  342.             throw new ExecutionError("malformed.expression", var2);
  343.          }
  344.  
  345.          var1.setCondition((Expression)var3);
  346.       }
  347.  
  348.       var2 = var1.getThenStatement();
  349.       var3 = var2.acceptVisitor(this);
  350.       if (var3 != null) {
  351.          if (var3 instanceof ReferenceType) {
  352.             throw new ExecutionError("malformed.expression", var2);
  353.          }
  354.  
  355.          var1.setThenStatement((Node)var3);
  356.       }
  357.  
  358.       var2 = var1.getElseStatement();
  359.       var3 = var2.acceptVisitor(this);
  360.       if (var3 != null) {
  361.          if (var3 instanceof ReferenceType) {
  362.             throw new ExecutionError("malformed.expression", var2);
  363.          }
  364.  
  365.          var1.setElseStatement((Node)var3);
  366.       }
  367.  
  368.       return null;
  369.    }
  370.  
  371.    public Object visit(VariableDeclaration var1) {
  372.       String var2 = var1.getName();
  373.       if (this.context.isDefinedVariable(var2)) {
  374.          var1.setProperty("errorStrings", new String[]{var2});
  375.          throw new ExecutionError("variable.redefinition", var1);
  376.       } else {
  377.          if (var1.isFinal()) {
  378.             this.context.defineConstant(var2, (Object)null);
  379.          } else {
  380.             this.context.define(var2, (Object)null);
  381.          }
  382.  
  383.          Expression var3 = var1.getInitializer();
  384.          if (var3 != null) {
  385.             Object var4 = ((Node)var3).acceptVisitor(this);
  386.             if (var4 != null) {
  387.                if (var4 instanceof ReferenceType) {
  388.                   throw new ExecutionError("malformed.expression", var3);
  389.                }
  390.  
  391.                var1.setInitializer((Expression)var4);
  392.             }
  393.          }
  394.  
  395.          return null;
  396.       }
  397.    }
  398.  
  399.    public Object visit(SimpleAssignExpression var1) {
  400.       Expression var2 = var1.getRightExpression();
  401.       Object var3 = var2.acceptVisitor(this);
  402.       if (var3 != null) {
  403.          if (var3 instanceof ReferenceType) {
  404.             throw new ExecutionError("right.expression", var2);
  405.          }
  406.  
  407.          var1.setRightExpression((Expression)var3);
  408.       }
  409.  
  410.       Expression var4 = var1.getLeftExpression();
  411.       if (var4 instanceof QualifiedName) {
  412.          List var5 = ((QualifiedName)var4).getIdentifiers();
  413.          String var6 = ((IdentifierToken)var5.get(0)).image();
  414.          if (var5.size() == 1 && !this.context.exists(var6)) {
  415.             this.context.define(var6, (Object)null);
  416.          }
  417.       }
  418.  
  419.       var3 = var4.acceptVisitor(this);
  420.       if (var3 != null) {
  421.          if (var3 instanceof ReferenceType) {
  422.             throw new ExecutionError("left.expression", var1);
  423.          }
  424.  
  425.          var1.setLeftExpression((Expression)var3);
  426.       }
  427.  
  428.       return null;
  429.    }
  430.  
  431.    public Object visit(BlockStatement var1) {
  432.       this.context.enterScope();
  433.       this.visitList(var1.getStatements());
  434.       this.context.leaveScope();
  435.       return null;
  436.    }
  437.  
  438.    public Object visit(ObjectFieldAccess var1) {
  439.       Object var2 = var1.getExpression().acceptVisitor(this);
  440.       if (var2 != null) {
  441.          if (var2 instanceof ReferenceType) {
  442.             return new StaticFieldAccess((ReferenceType)var2, var1.getFieldName(), var1.getFilename(), var1.getBeginLine(), var1.getBeginColumn(), var1.getEndLine(), var1.getEndColumn());
  443.          }
  444.  
  445.          var1.setExpression((Expression)var2);
  446.       }
  447.  
  448.       return null;
  449.    }
  450.  
  451.    public Object visit(ObjectMethodCall var1) {
  452.       List var2 = var1.getArguments();
  453.       if (var2 != null) {
  454.          this.visitList(var2);
  455.       }
  456.  
  457.       Expression var3 = var1.getExpression();
  458.       Object var4;
  459.       if (var3 == null) {
  460.          var4 = this.context.getDefaultQualifier(var1);
  461.       } else {
  462.          var4 = var3.acceptVisitor(this);
  463.          if (var4 == null) {
  464.             return null;
  465.          }
  466.       }
  467.  
  468.       if (var4 == null) {
  469.          return new FunctionCall(var1.getMethodName(), var1.getArguments(), var1.getFilename(), var1.getBeginLine(), var1.getBeginColumn(), var1.getEndLine(), var1.getEndColumn());
  470.       } else if (var4 instanceof ReferenceType) {
  471.          return new StaticMethodCall((ReferenceType)var4, var1.getMethodName(), var1.getArguments(), var1.getFilename(), var1.getBeginLine(), var1.getBeginColumn(), var1.getEndLine(), var1.getEndColumn());
  472.       } else {
  473.          var1.setExpression((Expression)var4);
  474.          return null;
  475.       }
  476.    }
  477.  
  478.    public Object visit(SuperMethodCall var1) {
  479.       List var2 = var1.getArguments();
  480.       if (var2 != null) {
  481.          this.visitList(var2);
  482.       }
  483.  
  484.       return null;
  485.    }
  486.  
  487.    public Object visit(ThisExpression var1) {
  488.       return this.context.getDefaultQualifier(var1, var1.getClassName());
  489.    }
  490.  
  491.    public Object visit(QualifiedName var1) {
  492.       List var2 = var1.getIdentifiers();
  493.       IdentifierToken var3 = (IdentifierToken)var2.get(0);
  494.       if (this.context.isDefined(var3.image())) {
  495.          Object var10 = this.context.createName(var1, var3);
  496.          Iterator var11 = var2.iterator();
  497.          var11.next();
  498.  
  499.          while(var11.hasNext()) {
  500.             IdentifierToken var15;
  501.             var10 = new ObjectFieldAccess((Expression)var10, (var15 = (IdentifierToken)var11.next()).image(), var1.getFilename(), var3.beginLine(), var3.beginColumn(), var15.endLine(), var15.endColumn());
  502.          }
  503.  
  504.          return var10;
  505.       } else {
  506.          List var4 = (List)((LinkedList)var2).clone();
  507.          boolean var5 = false;
  508.  
  509.          while(var4.size() > 0) {
  510.             String var6 = TreeUtilities.listToName(var4);
  511.             if (var5 = this.context.classExists(var6)) {
  512.                break;
  513.             }
  514.  
  515.             var4.remove(var4.size() - 1);
  516.          }
  517.  
  518.          if (!var5) {
  519.             var1.setProperty("errorStrings", new String[]{var3.image()});
  520.             throw new ExecutionError("undefined.class", var1);
  521.          } else {
  522.             IdentifierToken var12 = (IdentifierToken)var4.get(var4.size() - 1);
  523.             ReferenceType var7 = new ReferenceType(var4, var1.getFilename(), var3.beginLine(), var3.beginColumn(), var12.endLine(), var12.endColumn());
  524.             if (var4.size() == var2.size()) {
  525.                return var7;
  526.             } else {
  527.                ListIterator var8 = var2.listIterator(var4.size());
  528.  
  529.                Object var9;
  530.                for(var9 = new StaticFieldAccess(var7, (var12 = (IdentifierToken)var8.next()).image(), var1.getFilename(), var3.beginLine(), var3.beginColumn(), var12.endLine(), var12.endColumn()); var8.hasNext(); var9 = new ObjectFieldAccess((Expression)var9, (var12 = (IdentifierToken)var8.next()).image(), var1.getFilename(), var3.beginLine(), var3.beginColumn(), var12.endLine(), var12.endColumn())) {
  531.                }
  532.  
  533.                return var9;
  534.             }
  535.          }
  536.       }
  537.    }
  538.  
  539.    public Object visit(SimpleAllocation var1) {
  540.       List var2 = var1.getArguments();
  541.       if (var2 != null) {
  542.          this.visitList(var2);
  543.       }
  544.  
  545.       return null;
  546.    }
  547.  
  548.    public Object visit(ArrayAllocation var1) {
  549.       this.visitList(var1.getSizes());
  550.       if (var1.getInitialization() != null) {
  551.          var1.getInitialization().acceptVisitor(this);
  552.       }
  553.  
  554.       return null;
  555.    }
  556.  
  557.    public Object visit(InnerAllocation var1) {
  558.       this.visitExpressionContainer(var1);
  559.       List var2 = var1.getArguments();
  560.       if (var2 != null) {
  561.          this.visitList(var2);
  562.       }
  563.  
  564.       return null;
  565.    }
  566.  
  567.    public Object visit(ArrayInitializer var1) {
  568.       this.visitList(var1.getCells());
  569.       return null;
  570.    }
  571.  
  572.    public Object visit(ArrayAccess var1) {
  573.       this.visitExpressionContainer(var1);
  574.       Expression var2 = var1.getCellNumber();
  575.       Object var3 = ((Node)var2).acceptVisitor(this);
  576.       if (var3 != null) {
  577.          if (var3 instanceof ReferenceType) {
  578.             throw new ExecutionError("malformed.expression", var2);
  579.          }
  580.  
  581.          var1.setCellNumber((Expression)var3);
  582.       }
  583.  
  584.       return null;
  585.    }
  586.  
  587.    public Object visit(NotExpression var1) {
  588.       this.visitExpressionContainer(var1);
  589.       return null;
  590.    }
  591.  
  592.    public Object visit(ComplementExpression var1) {
  593.       this.visitExpressionContainer(var1);
  594.       return null;
  595.    }
  596.  
  597.    public Object visit(PlusExpression var1) {
  598.       this.visitExpressionContainer(var1);
  599.       return null;
  600.    }
  601.  
  602.    public Object visit(MinusExpression var1) {
  603.       this.visitExpressionContainer(var1);
  604.       return null;
  605.    }
  606.  
  607.    public Object visit(AddExpression var1) {
  608.       this.visitBinaryExpression(var1);
  609.       return null;
  610.    }
  611.  
  612.    public Object visit(AddAssignExpression var1) {
  613.       this.visitBinaryExpression(var1);
  614.       return null;
  615.    }
  616.  
  617.    public Object visit(SubtractExpression var1) {
  618.       this.visitBinaryExpression(var1);
  619.       return null;
  620.    }
  621.  
  622.    public Object visit(SubtractAssignExpression var1) {
  623.       this.visitBinaryExpression(var1);
  624.       return null;
  625.    }
  626.  
  627.    public Object visit(MultiplyExpression var1) {
  628.       this.visitBinaryExpression(var1);
  629.       return null;
  630.    }
  631.  
  632.    public Object visit(MultiplyAssignExpression var1) {
  633.       this.visitBinaryExpression(var1);
  634.       return null;
  635.    }
  636.  
  637.    public Object visit(DivideExpression var1) {
  638.       this.visitBinaryExpression(var1);
  639.       return null;
  640.    }
  641.  
  642.    public Object visit(DivideAssignExpression var1) {
  643.       this.visitBinaryExpression(var1);
  644.       return null;
  645.    }
  646.  
  647.    public Object visit(RemainderExpression var1) {
  648.       this.visitBinaryExpression(var1);
  649.       return null;
  650.    }
  651.  
  652.    public Object visit(RemainderAssignExpression var1) {
  653.       this.visitBinaryExpression(var1);
  654.       return null;
  655.    }
  656.  
  657.    public Object visit(EqualExpression var1) {
  658.       this.visitBinaryExpression(var1);
  659.       return null;
  660.    }
  661.  
  662.    public Object visit(NotEqualExpression var1) {
  663.       this.visitBinaryExpression(var1);
  664.       return null;
  665.    }
  666.  
  667.    public Object visit(LessExpression var1) {
  668.       this.visitBinaryExpression(var1);
  669.       return null;
  670.    }
  671.  
  672.    public Object visit(LessOrEqualExpression var1) {
  673.       this.visitBinaryExpression(var1);
  674.       return null;
  675.    }
  676.  
  677.    public Object visit(GreaterExpression var1) {
  678.       this.visitBinaryExpression(var1);
  679.       return null;
  680.    }
  681.  
  682.    public Object visit(GreaterOrEqualExpression var1) {
  683.       this.visitBinaryExpression(var1);
  684.       return null;
  685.    }
  686.  
  687.    public Object visit(BitAndExpression var1) {
  688.       this.visitBinaryExpression(var1);
  689.       return null;
  690.    }
  691.  
  692.    public Object visit(BitAndAssignExpression var1) {
  693.       this.visitBinaryExpression(var1);
  694.       return null;
  695.    }
  696.  
  697.    public Object visit(ExclusiveOrExpression var1) {
  698.       this.visitBinaryExpression(var1);
  699.       return null;
  700.    }
  701.  
  702.    public Object visit(ExclusiveOrAssignExpression var1) {
  703.       this.visitBinaryExpression(var1);
  704.       return null;
  705.    }
  706.  
  707.    public Object visit(BitOrExpression var1) {
  708.       this.visitBinaryExpression(var1);
  709.       return null;
  710.    }
  711.  
  712.    public Object visit(BitOrAssignExpression var1) {
  713.       this.visitBinaryExpression(var1);
  714.       return null;
  715.    }
  716.  
  717.    public Object visit(ShiftLeftExpression var1) {
  718.       this.visitBinaryExpression(var1);
  719.       return null;
  720.    }
  721.  
  722.    public Object visit(ShiftLeftAssignExpression var1) {
  723.       this.visitBinaryExpression(var1);
  724.       return null;
  725.    }
  726.  
  727.    public Object visit(ShiftRightExpression var1) {
  728.       this.visitBinaryExpression(var1);
  729.       return null;
  730.    }
  731.  
  732.    public Object visit(ShiftRightAssignExpression var1) {
  733.       this.visitBinaryExpression(var1);
  734.       return null;
  735.    }
  736.  
  737.    public Object visit(UnsignedShiftRightExpression var1) {
  738.       this.visitBinaryExpression(var1);
  739.       return null;
  740.    }
  741.  
  742.    public Object visit(UnsignedShiftRightAssignExpression var1) {
  743.       this.visitBinaryExpression(var1);
  744.       return null;
  745.    }
  746.  
  747.    public Object visit(AndExpression var1) {
  748.       this.visitBinaryExpression(var1);
  749.       return null;
  750.    }
  751.  
  752.    public Object visit(OrExpression var1) {
  753.       this.visitBinaryExpression(var1);
  754.       return null;
  755.    }
  756.  
  757.    public Object visit(InstanceOfExpression var1) {
  758.       this.visitExpressionContainer(var1);
  759.       return null;
  760.    }
  761.  
  762.    public Object visit(ConditionalExpression var1) {
  763.       Expression var2 = var1.getConditionExpression();
  764.       Object var3 = ((Node)var2).acceptVisitor(this);
  765.       if (var3 != null) {
  766.          if (var3 instanceof ReferenceType) {
  767.             throw new ExecutionError("malformed.expression", var2);
  768.          }
  769.  
  770.          var1.setConditionExpression((Expression)var3);
  771.       }
  772.  
  773.       var2 = var1.getIfTrueExpression();
  774.       var3 = ((Node)var2).acceptVisitor(this);
  775.       if (var3 != null) {
  776.          if (var3 instanceof ReferenceType) {
  777.             throw new ExecutionError("malformed.second.operand", var2);
  778.          }
  779.  
  780.          var1.setIfTrueExpression((Expression)var3);
  781.       }
  782.  
  783.       var2 = var1.getIfFalseExpression();
  784.       var3 = ((Node)var2).acceptVisitor(this);
  785.       if (var3 != null) {
  786.          if (var3 instanceof ReferenceType) {
  787.             throw new ExecutionError("malformed.third.operand", var2);
  788.          }
  789.  
  790.          var1.setIfFalseExpression((Expression)var3);
  791.       }
  792.  
  793.       return null;
  794.    }
  795.  
  796.    public Object visit(PostIncrement var1) {
  797.       this.visitExpressionContainer(var1);
  798.       return null;
  799.    }
  800.  
  801.    public Object visit(PreIncrement var1) {
  802.       this.visitExpressionContainer(var1);
  803.       return null;
  804.    }
  805.  
  806.    public Object visit(PostDecrement var1) {
  807.       this.visitExpressionContainer(var1);
  808.       return null;
  809.    }
  810.  
  811.    public Object visit(PreDecrement var1) {
  812.       this.visitExpressionContainer(var1);
  813.       return null;
  814.    }
  815.  
  816.    public Object visit(CastExpression var1) {
  817.       this.visitExpressionContainer(var1);
  818.       return null;
  819.    }
  820.  
  821.    public Object visit(ClassAllocation var1) {
  822.       List var2 = var1.getArguments();
  823.       if (var2 != null) {
  824.          this.visitList(var2);
  825.       }
  826.  
  827.       return null;
  828.    }
  829.  
  830.    public Object visit(InnerClassAllocation var1) {
  831.       this.visitExpressionContainer(var1);
  832.       List var2 = var1.getArguments();
  833.       if (var2 != null) {
  834.          this.visitList(var2);
  835.       }
  836.  
  837.       return null;
  838.    }
  839.  
  840.    public Object visit(FormalParameter var1) {
  841.       if (var1.isFinal()) {
  842.          this.context.defineConstant(var1.getName(), (Object)null);
  843.       } else {
  844.          this.context.define(var1.getName(), (Object)null);
  845.       }
  846.  
  847.       return null;
  848.    }
  849.  
  850.    public Object visit(ClassDeclaration var1) {
  851.       this.context.defineClass(var1);
  852.       return null;
  853.    }
  854.  
  855.    public Object visit(InterfaceDeclaration var1) {
  856.       this.context.defineClass(var1);
  857.       return null;
  858.    }
  859.  
  860.    private void visitExpressionContainer(ExpressionContainer var1) {
  861.       Expression var2 = var1.getExpression();
  862.       Object var3 = var2.acceptVisitor(this);
  863.       if (var3 != null) {
  864.          if (var3 instanceof ReferenceType) {
  865.             throw new ExecutionError("malformed.expression", var2);
  866.          }
  867.  
  868.          var1.setExpression((Expression)var3);
  869.       }
  870.  
  871.    }
  872.  
  873.    private void visitBinaryExpression(BinaryExpression var1) {
  874.       Object var2 = var1.getLeftExpression().acceptVisitor(this);
  875.       if (var2 != null) {
  876.          if (!(var2 instanceof Expression)) {
  877.             throw new ExecutionError("left.operand", var1);
  878.          }
  879.  
  880.          var1.setLeftExpression((Expression)var2);
  881.       }
  882.  
  883.       var2 = var1.getRightExpression().acceptVisitor(this);
  884.       if (var2 != null) {
  885.          if (!(var2 instanceof Expression)) {
  886.             throw new ExecutionError("right.operand", var1);
  887.          }
  888.  
  889.          var1.setRightExpression((Expression)var2);
  890.       }
  891.  
  892.    }
  893.  
  894.    private void visitList(List var1) {
  895.       ListIterator var3 = var1.listIterator();
  896.  
  897.       while(var3.hasNext()) {
  898.          Node var2;
  899.          Object var4 = (var2 = (Node)var3.next()).acceptVisitor(this);
  900.          if (var4 != null) {
  901.             if (var4 instanceof ReferenceType) {
  902.                throw new ExecutionError("malformed.expression", var2);
  903.             }
  904.  
  905.             var3.set(var4);
  906.          }
  907.       }
  908.  
  909.    }
  910.  
  911.    public NameVisitor(Context var1) {
  912.       this.context = var1;
  913.    }
  914. }
  915.